import { defineStore } from 'pinia'

/* 
  defineStore(storeName,options)  //选项式写法
  defineStore(storeName,setupFunction)  //组合式写法
      storeName  store模块名称(要求是一个独一无二的名字)
  返回值是一个方法 => 调用该方法返回被创建的store实例(单例模式)

  store实例中如何存储数据
     1. pinia中可以直接对应属性名修改state数据 => 不需要分同步和异步
     2. state中的数据 getter中的计算属性 actions中的方法  均会对应属性名/方法名 存储到store实例上 => 可以直接取

  store = {
      a,
      b,
      doubleA,
      doubleB,
      addA,
      addB,
      addA_Async
  }


*/

export const useCountStore = defineStore('count', {
  state() {
    return {
      a: 1,
      b: 2,
    }
  },
  getters: {
    doubleA: function (state) {
      // console.log("state", state);
      // console.log("this", this);
      return this.a * 2
    },
    doubleB: function () {
      return this.b * 2
    },
    doubleBoth: function () {
      return this.doubleA + this.doubleB;
    }
  },
  actions: {
    addA() {
      this.a++;
    },
    addAN(n) {
      console.log("参数", n);
      this.a += n;
    },
    addB() {
      this.b++;
    },
    addA_Async: function () {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          this.a++;
          resolve();
        }, 2000)
      })
    },
    addB_Async: function () {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          this.b++;
          resolve();
        }, 2000)
      })
    },
    addBoth_Async: async function () {
      await this.addA_Async();
      await this.addB_Async();
    }
  }
})





